#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/wait.h>

#define MAX_SIZE 64
char input_str[MAX_SIZE];
int input = 1;
char* split_str[MAX_SIZE];
void split(char* str, int sz)
{
    int i=0;
    for(i=1, split_str[0] = strtok(str, " ");split_str[i-1];++i)
    {
        split_str[i] = strtok(NULL, " ");
    }
    
}


void exe(char* str[])
{
    pid_t pid = fork();
    if(pid < 0)
    {
        perror("fork()");
        exit(50);
    }
    else if(pid > 0)
    {
        int status = 0;
        pid_t id = waitpid(pid,&status,0);
        if(WIFEXITED(status) == 0)
        {
            printf("异常退出\n");
            return;
        }
    }   
    else 
    {   
        //子进程完成指令
        
        execvp(split_str[0], split_str);
        exit(40);
    
    }
}



int main()
{
    while(input)
    {
        
        printf("[%s@%s %s]", getenv("USER"), getenv("HOSTNAME"), getenv("PWD"));
        //读取用户输入
        char* s = fgets(input_str, MAX_SIZE, stdin);
        if(s == NULL)
            continue;
        size_t sz = strlen(s);
        s[sz-1] = '\0';
        
        //分割字符串
        split(input_str, sz);

        //特判内建命令
        //
        // 
        

        //创建子进程完成指令
        exe(split_str); 
        



        //Debug
        //printf("%zd",sz);
        
        
        //int i=0;
        //for(i=0;split_str[i];++i)
        //{
        //    printf("%s ",split_str[i]);
        //}


    }
    
    


    return 0;
}
